#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <string.h>
#include <fcntl.h>
#include <stdlib.h>
#define FILENAME "myfifo"

// 服务端要求创建一个命名管道 
// 并且接受客户端发来的消息
int main()
{
  // open the fifo
  if (mkfifo(FILENAME , 0666) < 0)
  {
    perror("mkfifo error!\n");
    return -1;
  }

  // open the file 
  int fd = open(FILENAME , O_RDONLY);
  if (fd < 0)
  {
    perror("open fail!\n");
    return 1;
  }

  char msg[128];
  // read msg from fifo 
  while (1)
  {
    msg[0] = 0; 
    ssize_t s = read(fd , msg , sizeof(msg)-1); 
    if (s > 0)
    {
      msg[s] = 0;
      printf("client say: %s\n" , msg);
      if (fork() == 0)
      {
        execlp(msg , msg , NULL);
        exit(1);
      }
      waitpid(-1 , NULL , 0);
    }
    else if (s == 0)
    {
      printf("client end!\n");
      break;
    }
    else 
    {
      perror("read error!\n");
      exit(-1);
    }
  }
  close(fd);
  return 0;
}
